[C] Decompositor de números em fatores primos

Publicado por Enzo de Brito Ferber 27/06/2007

[ Hits: 10.213 ]

Homepage: http://www.maximasonorizacao.com.br

Download decom_primes.c




Como o nome já diz, um programa escrito em C, que decompõe um número qualquer em fatores primos e exibe estes números para o usuário.

  



Esconder código-fonte

/*
 * Programa: Decompositor de numeros
 * Arquivo : decom_primes.c
 * Autor   : Enzo Ferber 'Slackware_10'
 */

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int *lista_primos(int size){
    int prime, i=0, a, b;
    int *list = (int*)malloc(size*sizeof(int));
    if(!list){
        printf("[-] Erro ao alocar memoria.\n");
        printf("[-] Abortando...\n");
        exit(0);
    }
    for(a=2;a<size;a++){
        prime = FALSE;
        for(b=1;b<=a;b++){
            if(b == a) prime = TRUE;
            if(((a%b)==0) && (b != 1)) break;
        }
        if(prime) list[i] = a;
        if(prime) i += 1;
    }
    list[i] = 0x0;
    return list;
}

int *fatores_primos(int num){
    int *lista = lista_primos(num+1);
    int *fatores = (int*)malloc(num*sizeof(int));
    register int i;
    int div_atual, fat_atual, list_ref, ref;
    
    ref = num;
    fat_atual = 0;
    list_ref = 0;
    div_atual = lista[list_ref];
    
    for(i=0; i<num; i++){
        if(ref == 1){
            fatores[fat_atual] = 1;
            break;
        }
        if((ref % div_atual) == 0){
            ref = ref / div_atual;
            fatores[fat_atual] = div_atual;
            fat_atual++;
        }
        if((ref % div_atual) != 0) div_atual = lista[++list_ref];
    }
    
    free(lista);
    fatores[fat_atual+1] = 0x0;
    return fatores;
}

int main(int argc, char *argv[]){
    int *list;
    if(argc != 2){
        printf("[-] Uso: %s <numero_a_fatorar>\n", argv[0]);
        printf("[-] Abortando...\n");
        exit(0);
    }
    list = fatores_primos(atoi(argv[1]));
    while(*list) printf("%d\n", *list++);
    return 0;
}

    

    

Scripts recomendados

CALCULADORA SIMPLES

Fila dinâmica em C

Teste de desempenho com números primos em C (corrigido)

Alterar hora do sistema

Números Primos


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts